Super Castlevania 4 graphics decompression routine
--------------------------------------------------

Origin
------

$02:863D

Variables
---------

$00 -> 24 bits pointer to the compressed data.

$06 -> Compressed data index. The routine increases this variable
       after a byte read from the compressed stream.
       
$08 -> Compressed data length. This 16 bits integer is always the first
       two bytes of the compressed stream.
       
$0C -> Decompressed data index. The routine increases this variable
       after each write at [$7E:3xxx + $0C]

$0A -> Internal "byte to write" variable

$0E -> Internal write countdown.

$14 -> Read & Write method (A,B,C,D,E)

$18 -> Graphics pointer table index. This variable is loaded into X. It
       must be loaded prior to calling the decomp. sub-routine. Gfx pointer
       table located at: $10:0000 (each entry is a 24 bits integer)

$1C -> Decompressed buffer size (???)


Code flow
---------

- A couple of variables are initialized. 

- A pointer to the compressed graphics is loaded according to $18. The pointer is
  written to $00 (24 bits).
  
- $7E:3xxx is set to 0 ($400 bytes) **Check this mf..

- The length of the compressed stream is stored at $08 (first two bytes of the
  compressed data).
  
- The main loop starts here. Read one byte. These comparisons are done in this
  particular order.

- If byte < #$80 (A)

	-  Read & Write from (((second_byte - #$3DF) & #$3FF) + origin_of_decompressed_data)  ((first_byte >> 2) + 2) times.

- If byte < #$A0 (B)

	- Read & Write (byte & 0x1F) times

- If byte < #$C0 (C)

	- Read8 & Write16 ((first_byte & 0x1F) + 2). Before writing slap a 00
	  as high nibble to make the var 16 bits.
	  

- If byte < #$E0 (D)

	- Write next byte ((first_byte & 0x1F) + 2) times

- If byte >= #$E0 (E)

	- Write #$00 ((byte & 0x1F) + 2) times
